From 3a577ce8f056d0e52668c9ba9340f88cada06b84 Mon Sep 17 00:00:00 2001 From: Bryan Davis Date: Thu, 2 Jul 2015 16:38:06 -0600 Subject: [PATCH] MonologSpi: Add method to provide additional configuration Allow post-initialization configuration of MonologSpi by providing a `mergeConfig()` method that can be used to merge a given collection of configuration data with the existing configuration. Bug: T104584 Change-Id: Iba6f115a79dbc0060f64a9095467d147cf53b8ae --- includes/debug/logger/MonologSpi.php | 20 ++- .../{logging => logger}/LegacyLoggerTest.php | 0 .../includes/debug/logger/MonologSpiTest.php | 136 ++++++++++++++++++ 3 files changed, 155 insertions(+), 1 deletion(-) rename tests/phpunit/includes/debug/{logging => logger}/LegacyLoggerTest.php (100%) create mode 100644 tests/phpunit/includes/debug/logger/MonologSpiTest.php diff --git a/includes/debug/logger/MonologSpi.php b/includes/debug/logger/MonologSpi.php index a07fdc4a8b..e32e0b2263 100644 --- a/includes/debug/logger/MonologSpi.php +++ b/includes/debug/logger/MonologSpi.php @@ -129,7 +129,25 @@ class MonologSpi implements Spi { * @param array $config Configuration data. */ public function __construct( array $config ) { - $this->config = $config; + $this->config = array(); + $this->mergeConfig( $config ); + } + + + /** + * Merge additional configuration data into the configuration. + * + * @since 1.26 + * @param array $config Configuration data. + */ + public function mergeConfig( array $config ) { + foreach ( $config as $key => $value ) { + if ( isset( $this->config[$key] ) ) { + $this->config[$key] = array_merge( $this->config[$key], $value ); + } else { + $this->config[$key] = $value; + } + } $this->reset(); } diff --git a/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php b/tests/phpunit/includes/debug/logger/LegacyLoggerTest.php similarity index 100% rename from tests/phpunit/includes/debug/logging/LegacyLoggerTest.php rename to tests/phpunit/includes/debug/logger/LegacyLoggerTest.php diff --git a/tests/phpunit/includes/debug/logger/MonologSpiTest.php b/tests/phpunit/includes/debug/logger/MonologSpiTest.php new file mode 100644 index 0000000000..aa0a54ffd6 --- /dev/null +++ b/tests/phpunit/includes/debug/logger/MonologSpiTest.php @@ -0,0 +1,136 @@ + array( + '@default' => array( + 'processors' => array( 'constructor' ), + 'handlers' => array( 'constructor' ), + ), + ), + 'processors' => array( + 'constructor' => array( + 'class' => 'constructor', + ), + ), + 'handlers' => array( + 'constructor' => array( + 'class' => 'constructor', + 'formatter' => 'constructor', + ), + ), + 'formatters' => array( + 'constructor' => array( + 'class' => 'constructor', + ), + ), + ); + + $fixture = new MonologSpi( $base ); + $this->assertSame( + $base, + TestingAccessWrapper::newFromObject( $fixture )->config + ); + + $fixture->mergeConfig( array( + 'loggers' => array( + 'merged' => array( + 'processors' => array( 'merged' ), + 'handlers' => array( 'merged' ), + ), + ), + 'processors' => array( + 'merged' => array( + 'class' => 'merged', + ), + ), + 'magic' => array( + 'idkfa' => array( 'xyzzy' ), + ), + 'handlers' => array( + 'merged' => array( + 'class' => 'merged', + 'formatter' => 'merged', + ), + ), + 'formatters' => array( + 'merged' => array( + 'class' => 'merged', + ), + ), + ) ); + $this->assertSame( + array( + 'loggers' => array( + '@default' => array( + 'processors' => array( 'constructor' ), + 'handlers' => array( 'constructor' ), + ), + 'merged' => array( + 'processors' => array( 'merged' ), + 'handlers' => array( 'merged' ), + ), + ), + 'processors' => array( + 'constructor' => array( + 'class' => 'constructor', + ), + 'merged' => array( + 'class' => 'merged', + ), + ), + 'handlers' => array( + 'constructor' => array( + 'class' => 'constructor', + 'formatter' => 'constructor', + ), + 'merged' => array( + 'class' => 'merged', + 'formatter' => 'merged', + ), + ), + 'formatters' => array( + 'constructor' => array( + 'class' => 'constructor', + ), + 'merged' => array( + 'class' => 'merged', + ), + ), + 'magic' => array( + 'idkfa' => array( 'xyzzy' ), + ), + ), + TestingAccessWrapper::newFromObject( $fixture )->config + ); + } + +} -- 2.20.1